package com.base.common.service;

import java.io.Serializable;
import java.util.List;

import com.base.common.persistence.Pagination;

/**
 * <p> T 泛型<实体类> </p>
 * @Description 顶级Service
 * @author tcq
 * @author v 1.0
 * @date 2019年1月30日 上午11:14:55
 */
public interface IService<T>{

	/**
     * <p>
     * 根据 ID 查询
     * </p>
     *
     * @param id 主键ID
     * @return T
     */
    T findById(Serializable id);
    
    /**
     * <p>
     * 查询（根据T 查询一条记录）
     * </p>
     *
     * @param entity 实体对象
     * @return List<T>
     */
    T findOne(T entity);
    
    /**
     * <p>
     * 查询（根据T 批量查询）
     * </p>
     *
     * @param entity 实体对象
     * @return List<T>
     */
    List<T> findByEntity(T entity);
    
    /**
     * <p>
     * 查询（根据T 批量分页查询）
     * </p>
     *
     * @param entity 实体对象
     * @return List<T>
     */
    List<T> findByPage(T entity, Pagination page);
    
    
	/**
     * <p>
     * 插入一条记录（选择字段，策略插入）
     * </p>
     *
     * @param entity 实体对象
     * @return boolean
     */
    void insert(T entity);


    /**
     * <p>
     * 根据 ID 删除
     * </p>
     *
     * @param id 主键ID
     * @return boolean
     */
    void deleteById(Serializable id);


    /**
     * <p>
     * 根据 ID 选择修改
     * </p>
     *
     * @param entity 实体对象
     * @return boolean
     */
    void updateById(T entity);

    
    /**
     * <p>
     * 根据 实体类 选择修改
     * </p>
     *
     * @param entity 实体对象
     * @return boolean
     */
    void updateByEntity(T entity);
}
